const jwt = require('jsonwebtoken');
const { User } = require('../models');

const authenticateToken = async (req, res, next) => {
  try {
    // 从请求头获取token
    const token = req.header('Authorization')?.replace('Bearer ', '');
    
    if (!token) {
      return res.status(401).json({
        code: 1,
        message: '请先登录'
      });
    }

    // 验证token
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    
    // 查找用户
    const user = await User.findById(decoded.id);
    
    if (!user) {
      throw new Error('用户不存在');
    }

    // 将用户信息添加到请求对象中
    req.user = user;
    req.token = token;
    
    next();
  } catch (error) {
    console.error('认证失败:', error);
    res.status(401).json({
      code: 1,
      message: '认证失败'
    });
  }
};

// 检查用户是否为管理员
const isAdmin = async (req, res, next) => {
  try {
    // 确保用户已经通过了authenticateToken中间件的验证
    if (!req.user) {
      return res.status(401).json({
        code: 1,
        message: '请先登录'
      });
    }

    // 检查用户是否具有管理员角色
    if (req.user.role !== 'admin') {
      return res.status(403).json({
        code: 1,
        message: '权限不足，需要管理员权限'
      });
    }

    // 用户是管理员，允许继续
    next();
  } catch (error) {
    console.error('管理员权限检查失败:', error);
    res.status(500).json({
      code: 1,
      message: '服务器错误'
    });
  }
};

module.exports = { authenticateToken, isAdmin };